home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / makeefile_and_src / makeefile / makeefile_epp.e < prev    next >
Text File  |  1994-04-20  |  6KB  |  191 lines

  1. /*
  2.  * MakeEFile
  3.  *
  4.  * Programme d'automatisation de création d'un éxécutable depuis un source en E.
  5.  *
  6.  * Version 1 - © Frantz Balinski
  7.  *
  8.  * Usage:
  9.  * - Placer le programme MakeEFile dans C:
  10.  * - pour chaque source E que vous voulez compiler, créez, dans le même répertoire,
  11.  *   une icône TOOL. Appelez-la MakeEFile (pour que le wb recherche le programme
  12.  *   dans le chemins mémorisés (default paths)).
  13.  * - Réglez les TOOLTYPES suivants:
  14.  *   (ceux-ci sont indispensables)
  15.  *   NAME : le nom de l'éxécutable généré (ex MonProgramme).
  16.  *   EPP  : (flag) YES/NO ou OUI/NON, indique que la compilation est en 2 passes.
  17.  *          (EPP MonProgramme_epp MonProgramme.e, EC MonProgramme).
  18.  *   (ceux-là sont optionnels)
  19.  *   EPPDIR  : (seulement si EPP=(YES|OUI)) chemin d'accés à EPP (ex chemin/EPP).
  20.  *   ECDIR   : chemin d'accès à EC.
  21.  *   VERSION : Numéro de version de l'éxécutable, défault 1.
  22.  *   AUTHOR  : Nom de l'auteur, utilisé pour la chaîne de version, placé aprés la
  23.  *             date.
  24.  *   REVPATH : Chemin d'accés au fichier comportant le numéro actuel de révision.
  25.  *             Par défault RAVPATH='revision' (dans le chemin courant).
  26.  *             si ce fichier n'est pas trouvé, REVPATH sera pris par défault,
  27.  *             la révision sera définie à <revision, et en fin de compilation,
  28.  *             le fichier 'revision' sera généré dans ce répertoire par défault.
  29.  *   WINDOW  : définition de la fenêtre de sortie, défault conout du E.
  30.  *
  31.  * Petits détails à respecter:
  32.  *   - Donnez l'extension '_epp.e' au fichier source EPP, '.e' au fichier source EC.
  33.  *   - Entrez les chemin d'accées complets aux modules EPP.
  34.  *
  35.  * Pour compiler votre source E, double-cliquez sur l'icône MakeEFile et tout
  36.  * devrait bien se passer.
  37.  *
  38.  * Une chaîne de version est générée pour l'éxécutable, la révision est incrémentée
  39.  * à chaque compilation. Elle est incluse automatiquement à la fin du source E:
  40.  * versionString:
  41.  *  CHAR '$VER: <MonProgramme> <version>.<Revision> (<date>)\n\b\0'
  42.  * La date est lue dans la variable ENV:DATE générée par KCommodity.
  43.  * Si ENV:DATE n'est pas trouvé, la date sera lue depuis le système.
  44.  *
  45.  */
  46.  
  47. PMODULE 'PMODULES:User/argarray'
  48.  
  49. MODULE    'icon','dos/dos','dos/datetime','intuition/intuition'
  50.  
  51. DEF    ttypes:PTR TO LONG, conhdle, oldstdout,
  52.     name:PTR TO CHAR,
  53.     useepp:LONG, eppdir:PTR TO CHAR,
  54.     ecdir:PTR TO CHAR,
  55.     version, revision, revpath:PTR TO CHAR,
  56.     date[9]:STRING,
  57.     author:PTR TO CHAR
  58.  
  59. PROC main() HANDLE
  60.   iconbase:=NIL
  61.   IF _astartup()<>NIL; SetIoErr(ERROR_NO_FREE_STORE); Raise(RETURN_FAIL); ENDIF
  62.   IF _argc<>0
  63.     WriteF('MakeEFile: Uniquement par le Workbench.\n'); Raise(RETURN_WARN)
  64.   ENDIF
  65.   IF (iconbase:=OpenLibrary('icon.library',37))=NIL THEN Raise(RETURN_FAIL)
  66.  
  67.   ttypes:=_argarrayinit(_argc,_argv)
  68.   getargs()
  69.  
  70.   /* sauver la chaîne de version dans t:
  71.    * ne pas inscrire le caractère '$' devant 'VER:' car pour ce
  72.    * programme, ça invaliderait la vraie chaîne de version qui sera
  73.    * située aprés.
  74.    */
  75.   fwritef('T:version_string','CHAR \a\cVER: \s \d.\d (\s) \s\a,10,13,0\n',
  76.       [36,name,version,revision,date,author])
  77.  
  78.   /* création du script */
  79.   IF (useepp)
  80.     fwritef('makefile.script',
  81.       'Join \s_epp.e T:version_string as \s_vs_epp.e\n'+
  82.       '\s \s_vs_epp \s.e\n'+
  83.       '\s \s\n'+
  84.       'Delete >NIL: T:version_string \s_vs_epp.e \s.e\n',
  85.       [name,name,eppdir,name,name,ecdir,name,name,name])
  86.   ELSE
  87.     fwritef('makefile.script',
  88.       'Join \s.e T:version_string as \s_vs.e\n'+
  89.       '\s \s_vs\n'+
  90.       'Delete >NIL: T:version_string \s_vs.e\n'+
  91.       'Rename \s_vs \s\n',
  92.       [name,name,ecdir,name,name,name,name])
  93.       Execute('Execute makefile.script',stdout,stdout)
  94.   ENDIF
  95.   IF oldstdout=NIL THEN WriteF('')
  96.   Execute('Execute makefile.script',stdout,stdout)
  97.   INC revision
  98.   fwritef(revpath,'\d',[revision])
  99.   DeleteFile('makefile.script')
  100.  
  101.   Raise(RETURN_OK)
  102.   EXCEPT
  103.   _argarraydone()
  104.   IF conhdle<>NIL; SetStdOut(oldstdout); Close(conhdle); ENDIF
  105.   IF iconbase<>NIL THEN CloseLibrary(iconbase)
  106.   _exit(exception)
  107. ENDPROC
  108.  
  109. PROC getargs()
  110.   DEF fhdle, window, lock, buffer[17]:STRING, dat:datetime, i
  111.   oldstdout:=NIL
  112.   IF (window:=_argstring(ttypes,'WINDOW',NIL))
  113.     IF (conhdle:=Open(window,MODE_READWRITE)) THEN oldstdout:=SetStdOut(conhdle)
  114.   ENDIF
  115.  
  116.   IF (name:=_argstring(ttypes,'NAME',NIL))=NIL
  117.     alert('TOOLTYPE NAME non défini',NIL)
  118.     Raise(RETURN_FAIL)
  119.   ENDIF
  120.  
  121.   IF (version:=_argint(ttypes,'VERSION',1))<0
  122.     alert('Mauvais numéro de version\n\d',[version])
  123.     Raise(RETURN_ERROR)
  124.   ENDIF
  125.  
  126.   author:=_argstring(ttypes,'AUTHOR',NIL)
  127.  
  128.   useepp:=_argstring(ttypes,'EPP',NIL); UpperStr(useepp)
  129.   IF Or(StrCmp(useepp,'YES',STRLEN),StrCmp(useepp,'OUI',STRLEN))
  130.     useepp:=TRUE
  131.     eppdir:=_argstring(ttypes,'EPPDIR','E:EPP/bin/EPP')
  132.   ELSE
  133.     /* EPP inutilisé */
  134.     useepp:=FALSE
  135.     eppdir:=NIL
  136.   ENDIF
  137.  
  138.   ecdir:=_argstring(ttypes,'ECDIR','E:v39_emodules/Bin/EC21b_v39')
  139.  
  140.   IF (revpath:=_argstring(ttypes,'REVPATH',NIL))
  141.     IF (lock:=Lock(revpath,ACCESS_READ))THEN UnLock(lock) ELSE revpath:='revision'
  142.   ELSE
  143.     revpath:='revision'
  144.   ENDIF
  145.  
  146.   revision:=0
  147.   IF (fhdle:=Open(revpath,MODE_OLDFILE))
  148.     Fgets(fhdle,buffer,31)
  149.     StrToLong(buffer,{revision})
  150.     Close(fhdle)
  151.   ENDIF
  152.  
  153.   IF (fhdle:=Open('ENV:DATE',MODE_OLDFILE))
  154.     Fgets(fhdle,date,31)
  155.     Close(fhdle)
  156.   ELSE
  157.     DateStamp(dat)
  158.     dat.format :=FORMAT_CDN /* dd-mm-yy */
  159.     dat.flags  :=DTF_FUTURE
  160.     dat.strday :=NIL
  161.     dat.strdate:=date
  162.     dat.strtime:=NIL
  163.     DateToStr(dat)
  164.   ENDIF
  165.   i:=0
  166.   WHILE And(date[i]>" ",i<9)
  167.     IF Or(date[i]<"0",date[i++]>"9") THEN date[i-1]:="."
  168.   ENDWHILE
  169. ENDPROC
  170.  
  171. PROC alert(text,args)
  172.   EasyRequestArgs(NIL,[SIZEOF easystruct,0,'MakeEFile',text,'Abandon']:easystruct,
  173.     NIL,args)
  174. ENDPROC
  175.  
  176. PROC fwritef(filename,fmt,args)
  177.   DEF fhdle, errbuff[512]:STRING, hdrbuffer[256]:STRING, n=-1
  178.   IF (fhdle:=Open(filename,MODE_NEWFILE))
  179.     n:=VfPrintf(fhdle,fmt,args)
  180.     Close(fhdle)
  181.   ENDIF
  182.   IF n=-1
  183.     StrCopy(hdrbuffer,'Impossible de créer\n',STRLEN)
  184.     StrAdd(hdrbuffer,filename,ALL); StrAdd(hdrbuffer,'\n',STRLEN)
  185.     Fault(IoErr(),hdrbuffer,errbuff,512)
  186.     alert(errbuff,NIL)
  187.     Raise(RETURN_ERROR)
  188.   ENDIF
  189. ENDPROC
  190.  
  191.